/*******************************************************************************
 *	                           bsp.c
 *******************************************************************************/
#include "bsp.h"

/*******************************************************************************
 *	                           function
 *******************************************************************************/
void bsp_gpio_init(void);
void bsp_cpu_option_check(void);
void bsp_pw_delay_for_bug(void);
void bsp_clk_init(void);
void bsp_adc_init(void);
uint32_t bsp_pwm_init(void);
uint32_t bsp_cap_init(void);
void bsp_clk_init(void);
void system_clock_config(void);
void nor_spi_init(void);
void bsp_block_dly_init(void);

/*******************************************************************************
 * @brief  bsp_Init : first line in first task
 * \param[in] none
 * \retval: none
 *******************************************************************************/
void bsp_Init(void)
{
	system_clock_config();

	bsp_pw_delay_for_bug();

	bsp_cpu_option_check();

	bsp_clk_init();

	bsp_delay_init();

	bsp_gpio_init();

	app_tick_init(1);

	bsp_uart_init();

	sw_iic_init(sw_iic);

	nor_spi_init();
}

/*******************************************************************************
 * @brief  bsp_clk_init
 * \param[in] none
 * \retval: none
 *******************************************************************************/
void bsp_clk_init(void)
{
	RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_CRC);
	RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_DMA1);
	RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_DMA2);
	
	//RCM_EnableAHB2PeriphClock(RCM_AHB2_PERIPH_QSPI);
	RCM_EnableAHB2PeriphClock(RCM_AHB2_PERIPH_OTG_FS);
	
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_SPI1);
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_TMR1);
	
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_SPI2);
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_SPI3);
	
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR12);
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR13);
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR14);
	
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_I2C1);
	RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_I2C2);
	
	RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_ADC1);
}

/*******************************************************************************
 * @brief  bsp_pw_delay_for_bug
 * \param[in] none
 * \retval: none
 *******************************************************************************/
void bsp_pw_delay_for_bug(void)
{
	volatile uint32_t dly = 0 * 120 * 1000 * 1000 / 12;
	while (dly--)
	{
	}
}

/*******************************************************************************
 * @brief  bsp_Idle
 * \param[in] none
 * \retval: none
 *******************************************************************************/
void bsp_Idle(void)
{
}
